home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 2010 April / PCWorld0410.iso / hity wydania / Ubuntu 9.10 PL / karmelkowy-koliberek-desktop-9.10-i386-PL.iso / casper / filesystem.squashfs / usr / include / linux / ip_vs.h < prev    next >
C/C++ Source or Header  |  2009-10-16  |  12KB  |  406 lines

  1. /*
  2.  *      IP Virtual Server
  3.  *      data structure and functionality definitions
  4.  */
  5.  
  6. #ifndef _IP_VS_H
  7. #define _IP_VS_H
  8.  
  9. #include <linux/types.h>    /* For __beXX types in userland */
  10.  
  11. #define IP_VS_VERSION_CODE    0x010201
  12. #define NVERSION(version)            \
  13.     (version >> 16) & 0xFF,            \
  14.     (version >> 8) & 0xFF,            \
  15.     version & 0xFF
  16.  
  17. /*
  18.  *      Virtual Service Flags
  19.  */
  20. #define IP_VS_SVC_F_PERSISTENT    0x0001        /* persistent port */
  21. #define IP_VS_SVC_F_HASHED    0x0002        /* hashed entry */
  22.  
  23. /*
  24.  *      Destination Server Flags
  25.  */
  26. #define IP_VS_DEST_F_AVAILABLE    0x0001        /* server is available */
  27. #define IP_VS_DEST_F_OVERLOAD    0x0002        /* server is overloaded */
  28.  
  29. /*
  30.  *      IPVS sync daemon states
  31.  */
  32. #define IP_VS_STATE_NONE    0x0000        /* daemon is stopped */
  33. #define IP_VS_STATE_MASTER    0x0001        /* started as master */
  34. #define IP_VS_STATE_BACKUP    0x0002        /* started as backup */
  35.  
  36. /*
  37.  *      IPVS socket options
  38.  */
  39. #define IP_VS_BASE_CTL        (64+1024+64)        /* base */
  40.  
  41. #define IP_VS_SO_SET_NONE    IP_VS_BASE_CTL        /* just peek */
  42. #define IP_VS_SO_SET_INSERT    (IP_VS_BASE_CTL+1)
  43. #define IP_VS_SO_SET_ADD    (IP_VS_BASE_CTL+2)
  44. #define IP_VS_SO_SET_EDIT    (IP_VS_BASE_CTL+3)
  45. #define IP_VS_SO_SET_DEL    (IP_VS_BASE_CTL+4)
  46. #define IP_VS_SO_SET_FLUSH    (IP_VS_BASE_CTL+5)
  47. #define IP_VS_SO_SET_LIST    (IP_VS_BASE_CTL+6)
  48. #define IP_VS_SO_SET_ADDDEST    (IP_VS_BASE_CTL+7)
  49. #define IP_VS_SO_SET_DELDEST    (IP_VS_BASE_CTL+8)
  50. #define IP_VS_SO_SET_EDITDEST    (IP_VS_BASE_CTL+9)
  51. #define IP_VS_SO_SET_TIMEOUT    (IP_VS_BASE_CTL+10)
  52. #define IP_VS_SO_SET_STARTDAEMON (IP_VS_BASE_CTL+11)
  53. #define IP_VS_SO_SET_STOPDAEMON (IP_VS_BASE_CTL+12)
  54. #define IP_VS_SO_SET_RESTORE    (IP_VS_BASE_CTL+13)
  55. #define IP_VS_SO_SET_SAVE       (IP_VS_BASE_CTL+14)
  56. #define IP_VS_SO_SET_ZERO    (IP_VS_BASE_CTL+15)
  57. #define IP_VS_SO_SET_MAX    IP_VS_SO_SET_ZERO
  58.  
  59. #define IP_VS_SO_GET_VERSION    IP_VS_BASE_CTL
  60. #define IP_VS_SO_GET_INFO    (IP_VS_BASE_CTL+1)
  61. #define IP_VS_SO_GET_SERVICES    (IP_VS_BASE_CTL+2)
  62. #define IP_VS_SO_GET_SERVICE    (IP_VS_BASE_CTL+3)
  63. #define IP_VS_SO_GET_DESTS    (IP_VS_BASE_CTL+4)
  64. #define IP_VS_SO_GET_DEST    (IP_VS_BASE_CTL+5)    /* not used now */
  65. #define IP_VS_SO_GET_TIMEOUT    (IP_VS_BASE_CTL+6)
  66. #define IP_VS_SO_GET_DAEMON    (IP_VS_BASE_CTL+7)
  67. #define IP_VS_SO_GET_MAX    IP_VS_SO_GET_DAEMON
  68.  
  69.  
  70. /*
  71.  *      IPVS Connection Flags
  72.  */
  73. #define IP_VS_CONN_F_FWD_MASK    0x0007        /* mask for the fwd methods */
  74. #define IP_VS_CONN_F_MASQ    0x0000        /* masquerading/NAT */
  75. #define IP_VS_CONN_F_LOCALNODE    0x0001        /* local node */
  76. #define IP_VS_CONN_F_TUNNEL    0x0002        /* tunneling */
  77. #define IP_VS_CONN_F_DROUTE    0x0003        /* direct routing */
  78. #define IP_VS_CONN_F_BYPASS    0x0004        /* cache bypass */
  79. #define IP_VS_CONN_F_SYNC    0x0020        /* entry created by sync */
  80. #define IP_VS_CONN_F_HASHED    0x0040        /* hashed entry */
  81. #define IP_VS_CONN_F_NOOUTPUT    0x0080        /* no output packets */
  82. #define IP_VS_CONN_F_INACTIVE    0x0100        /* not established */
  83. #define IP_VS_CONN_F_OUT_SEQ    0x0200        /* must do output seq adjust */
  84. #define IP_VS_CONN_F_IN_SEQ    0x0400        /* must do input seq adjust */
  85. #define IP_VS_CONN_F_SEQ_MASK    0x0600        /* in/out sequence mask */
  86. #define IP_VS_CONN_F_NO_CPORT    0x0800        /* no client port set yet */
  87. #define IP_VS_CONN_F_TEMPLATE    0x1000        /* template, not connection */
  88.  
  89. #define IP_VS_SCHEDNAME_MAXLEN    16
  90. #define IP_VS_IFNAME_MAXLEN    16
  91.  
  92.  
  93. /*
  94.  *    The struct ip_vs_service_user and struct ip_vs_dest_user are
  95.  *    used to set IPVS rules through setsockopt.
  96.  */
  97. struct ip_vs_service_user {
  98.     /* virtual service addresses */
  99.     __u16        protocol;
  100.     __be32            addr;        /* virtual ip address */
  101.     __be16            port;
  102.     __u32        fwmark;        /* firwall mark of service */
  103.  
  104.     /* virtual service options */
  105.     char            sched_name[IP_VS_SCHEDNAME_MAXLEN];
  106.     unsigned        flags;        /* virtual service flags */
  107.     unsigned        timeout;    /* persistent timeout in sec */
  108.     __be32            netmask;    /* persistent netmask */
  109. };
  110.  
  111.  
  112. struct ip_vs_dest_user {
  113.     /* destination server address */
  114.     __be32            addr;
  115.     __be16            port;
  116.  
  117.     /* real server options */
  118.     unsigned        conn_flags;    /* connection flags */
  119.     int            weight;        /* destination weight */
  120.  
  121.     /* thresholds for active connections */
  122.     __u32        u_threshold;    /* upper threshold */
  123.     __u32        l_threshold;    /* lower threshold */
  124. };
  125.  
  126.  
  127. /*
  128.  *    IPVS statistics object (for user space)
  129.  */
  130. struct ip_vs_stats_user
  131. {
  132.     __u32                   conns;          /* connections scheduled */
  133.     __u32                   inpkts;         /* incoming packets */
  134.     __u32                   outpkts;        /* outgoing packets */
  135.     __u64                   inbytes;        /* incoming bytes */
  136.     __u64                   outbytes;       /* outgoing bytes */
  137.  
  138.     __u32            cps;        /* current connection rate */
  139.     __u32            inpps;        /* current in packet rate */
  140.     __u32            outpps;        /* current out packet rate */
  141.     __u32            inbps;        /* current in byte rate */
  142.     __u32            outbps;        /* current out byte rate */
  143. };
  144.  
  145.  
  146. /* The argument to IP_VS_SO_GET_INFO */
  147. struct ip_vs_getinfo {
  148.     /* version number */
  149.     unsigned int        version;
  150.  
  151.     /* size of connection hash table */
  152.     unsigned int        size;
  153.  
  154.     /* number of virtual services */
  155.     unsigned int        num_services;
  156. };
  157.  
  158.  
  159. /* The argument to IP_VS_SO_GET_SERVICE */
  160. struct ip_vs_service_entry {
  161.     /* which service: user fills in these */
  162.     __u16        protocol;
  163.     __be32            addr;        /* virtual address */
  164.     __be16            port;
  165.     __u32        fwmark;        /* firwall mark of service */
  166.  
  167.     /* service options */
  168.     char            sched_name[IP_VS_SCHEDNAME_MAXLEN];
  169.     unsigned        flags;          /* virtual service flags */
  170.     unsigned        timeout;    /* persistent timeout */
  171.     __be32            netmask;    /* persistent netmask */
  172.  
  173.     /* number of real servers */
  174.     unsigned int        num_dests;
  175.  
  176.     /* statistics */
  177.     struct ip_vs_stats_user stats;
  178. };
  179.  
  180.  
  181. struct ip_vs_dest_entry {
  182.     __be32            addr;        /* destination address */
  183.     __be16            port;
  184.     unsigned        conn_flags;    /* connection flags */
  185.     int            weight;        /* destination weight */
  186.  
  187.     __u32        u_threshold;    /* upper threshold */
  188.     __u32        l_threshold;    /* lower threshold */
  189.  
  190.     __u32        activeconns;    /* active connections */
  191.     __u32        inactconns;    /* inactive connections */
  192.     __u32        persistconns;    /* persistent connections */
  193.  
  194.     /* statistics */
  195.     struct ip_vs_stats_user stats;
  196. };
  197.  
  198.  
  199. /* The argument to IP_VS_SO_GET_DESTS */
  200. struct ip_vs_get_dests {
  201.     /* which service: user fills in these */
  202.     __u16        protocol;
  203.     __be32            addr;        /* virtual address */
  204.     __be16            port;
  205.     __u32        fwmark;        /* firwall mark of service */
  206.  
  207.     /* number of real servers */
  208.     unsigned int        num_dests;
  209.  
  210.     /* the real servers */
  211.     struct ip_vs_dest_entry    entrytable[0];
  212. };
  213.  
  214.  
  215. /* The argument to IP_VS_SO_GET_SERVICES */
  216. struct ip_vs_get_services {
  217.     /* number of virtual services */
  218.     unsigned int        num_services;
  219.  
  220.     /* service table */
  221.     struct ip_vs_service_entry entrytable[0];
  222. };
  223.  
  224.  
  225. /* The argument to IP_VS_SO_GET_TIMEOUT */
  226. struct ip_vs_timeout_user {
  227.     int            tcp_timeout;
  228.     int            tcp_fin_timeout;
  229.     int            udp_timeout;
  230. };
  231.  
  232.  
  233. /* The argument to IP_VS_SO_GET_DAEMON */
  234. struct ip_vs_daemon_user {
  235.     /* sync daemon state (master/backup) */
  236.     int            state;
  237.  
  238.     /* multicast interface name */
  239.     char            mcast_ifn[IP_VS_IFNAME_MAXLEN];
  240.  
  241.     /* SyncID we belong to */
  242.     int            syncid;
  243. };
  244.  
  245. /*
  246.  *
  247.  * IPVS Generic Netlink interface definitions
  248.  *
  249.  */
  250.  
  251. /* Generic Netlink family info */
  252.  
  253. #define IPVS_GENL_NAME        "IPVS"
  254. #define IPVS_GENL_VERSION    0x1
  255.  
  256. struct ip_vs_flags {
  257.     __be32 flags;
  258.     __be32 mask;
  259. };
  260.  
  261. /* Generic Netlink command attributes */
  262. enum {
  263.     IPVS_CMD_UNSPEC = 0,
  264.  
  265.     IPVS_CMD_NEW_SERVICE,        /* add service */
  266.     IPVS_CMD_SET_SERVICE,        /* modify service */
  267.     IPVS_CMD_DEL_SERVICE,        /* delete service */
  268.     IPVS_CMD_GET_SERVICE,        /* get service info */
  269.  
  270.     IPVS_CMD_NEW_DEST,        /* add destination */
  271.     IPVS_CMD_SET_DEST,        /* modify destination */
  272.     IPVS_CMD_DEL_DEST,        /* delete destination */
  273.     IPVS_CMD_GET_DEST,        /* get destination info */
  274.  
  275.     IPVS_CMD_NEW_DAEMON,        /* start sync daemon */
  276.     IPVS_CMD_DEL_DAEMON,        /* stop sync daemon */
  277.     IPVS_CMD_GET_DAEMON,        /* get sync daemon status */
  278.  
  279.     IPVS_CMD_SET_CONFIG,        /* set config settings */
  280.     IPVS_CMD_GET_CONFIG,        /* get config settings */
  281.  
  282.     IPVS_CMD_SET_INFO,        /* only used in GET_INFO reply */
  283.     IPVS_CMD_GET_INFO,        /* get general IPVS info */
  284.  
  285.     IPVS_CMD_ZERO,            /* zero all counters and stats */
  286.     IPVS_CMD_FLUSH,            /* flush services and dests */
  287.  
  288.     __IPVS_CMD_MAX,
  289. };
  290.  
  291. #define IPVS_CMD_MAX (__IPVS_CMD_MAX - 1)
  292.  
  293. /* Attributes used in the first level of commands */
  294. enum {
  295.     IPVS_CMD_ATTR_UNSPEC = 0,
  296.     IPVS_CMD_ATTR_SERVICE,        /* nested service attribute */
  297.     IPVS_CMD_ATTR_DEST,        /* nested destination attribute */
  298.     IPVS_CMD_ATTR_DAEMON,        /* nested sync daemon attribute */
  299.     IPVS_CMD_ATTR_TIMEOUT_TCP,    /* TCP connection timeout */
  300.     IPVS_CMD_ATTR_TIMEOUT_TCP_FIN,    /* TCP FIN wait timeout */
  301.     IPVS_CMD_ATTR_TIMEOUT_UDP,    /* UDP timeout */
  302.     __IPVS_CMD_ATTR_MAX,
  303. };
  304.  
  305. #define IPVS_CMD_ATTR_MAX (__IPVS_SVC_ATTR_MAX - 1)
  306.  
  307. /*
  308.  * Attributes used to describe a service
  309.  *
  310.  * Used inside nested attribute IPVS_CMD_ATTR_SERVICE
  311.  */
  312. enum {
  313.     IPVS_SVC_ATTR_UNSPEC = 0,
  314.     IPVS_SVC_ATTR_AF,        /* address family */
  315.     IPVS_SVC_ATTR_PROTOCOL,        /* virtual service protocol */
  316.     IPVS_SVC_ATTR_ADDR,        /* virtual service address */
  317.     IPVS_SVC_ATTR_PORT,        /* virtual service port */
  318.     IPVS_SVC_ATTR_FWMARK,        /* firewall mark of service */
  319.  
  320.     IPVS_SVC_ATTR_SCHED_NAME,    /* name of scheduler */
  321.     IPVS_SVC_ATTR_FLAGS,        /* virtual service flags */
  322.     IPVS_SVC_ATTR_TIMEOUT,        /* persistent timeout */
  323.     IPVS_SVC_ATTR_NETMASK,        /* persistent netmask */
  324.  
  325.     IPVS_SVC_ATTR_STATS,        /* nested attribute for service stats */
  326.     __IPVS_SVC_ATTR_MAX,
  327. };
  328.  
  329. #define IPVS_SVC_ATTR_MAX (__IPVS_SVC_ATTR_MAX - 1)
  330.  
  331. /*
  332.  * Attributes used to describe a destination (real server)
  333.  *
  334.  * Used inside nested attribute IPVS_CMD_ATTR_DEST
  335.  */
  336. enum {
  337.     IPVS_DEST_ATTR_UNSPEC = 0,
  338.     IPVS_DEST_ATTR_ADDR,        /* real server address */
  339.     IPVS_DEST_ATTR_PORT,        /* real server port */
  340.  
  341.     IPVS_DEST_ATTR_FWD_METHOD,    /* forwarding method */
  342.     IPVS_DEST_ATTR_WEIGHT,        /* destination weight */
  343.  
  344.     IPVS_DEST_ATTR_U_THRESH,    /* upper threshold */
  345.     IPVS_DEST_ATTR_L_THRESH,    /* lower threshold */
  346.  
  347.     IPVS_DEST_ATTR_ACTIVE_CONNS,    /* active connections */
  348.     IPVS_DEST_ATTR_INACT_CONNS,    /* inactive connections */
  349.     IPVS_DEST_ATTR_PERSIST_CONNS,    /* persistent connections */
  350.  
  351.     IPVS_DEST_ATTR_STATS,        /* nested attribute for dest stats */
  352.     __IPVS_DEST_ATTR_MAX,
  353. };
  354.  
  355. #define IPVS_DEST_ATTR_MAX (__IPVS_DEST_ATTR_MAX - 1)
  356.  
  357. /*
  358.  * Attributes describing a sync daemon
  359.  *
  360.  * Used inside nested attribute IPVS_CMD_ATTR_DAEMON
  361.  */
  362. enum {
  363.     IPVS_DAEMON_ATTR_UNSPEC = 0,
  364.     IPVS_DAEMON_ATTR_STATE,        /* sync daemon state (master/backup) */
  365.     IPVS_DAEMON_ATTR_MCAST_IFN,    /* multicast interface name */
  366.     IPVS_DAEMON_ATTR_SYNC_ID,    /* SyncID we belong to */
  367.     __IPVS_DAEMON_ATTR_MAX,
  368. };
  369.  
  370. #define IPVS_DAEMON_ATTR_MAX (__IPVS_DAEMON_ATTR_MAX - 1)
  371.  
  372. /*
  373.  * Attributes used to describe service or destination entry statistics
  374.  *
  375.  * Used inside nested attributes IPVS_SVC_ATTR_STATS and IPVS_DEST_ATTR_STATS
  376.  */
  377. enum {
  378.     IPVS_STATS_ATTR_UNSPEC = 0,
  379.     IPVS_STATS_ATTR_CONNS,        /* connections scheduled */
  380.     IPVS_STATS_ATTR_INPKTS,        /* incoming packets */
  381.     IPVS_STATS_ATTR_OUTPKTS,    /* outgoing packets */
  382.     IPVS_STATS_ATTR_INBYTES,    /* incoming bytes */
  383.     IPVS_STATS_ATTR_OUTBYTES,    /* outgoing bytes */
  384.  
  385.     IPVS_STATS_ATTR_CPS,        /* current connection rate */
  386.     IPVS_STATS_ATTR_INPPS,        /* current in packet rate */
  387.     IPVS_STATS_ATTR_OUTPPS,        /* current out packet rate */
  388.     IPVS_STATS_ATTR_INBPS,        /* current in byte rate */
  389.     IPVS_STATS_ATTR_OUTBPS,        /* current out byte rate */
  390.     __IPVS_STATS_ATTR_MAX,
  391. };
  392.  
  393. #define IPVS_STATS_ATTR_MAX (__IPVS_STATS_ATTR_MAX - 1)
  394.  
  395. /* Attributes used in response to IPVS_CMD_GET_INFO command */
  396. enum {
  397.     IPVS_INFO_ATTR_UNSPEC = 0,
  398.     IPVS_INFO_ATTR_VERSION,        /* IPVS version number */
  399.     IPVS_INFO_ATTR_CONN_TAB_SIZE,    /* size of connection hash table */
  400.     __IPVS_INFO_ATTR_MAX,
  401. };
  402.  
  403. #define IPVS_INFO_ATTR_MAX (__IPVS_INFO_ATTR_MAX - 1)
  404.  
  405. #endif    /* _IP_VS_H */
  406.